#GO TO http://cran.r-project.org/ AND DOWNLOAD THE R RELEASE: R-2.5.1.
# or http://www.staff.ul.ie/mackenzieg/Assess/R_Integration_Tools/r_integration_tools.html
# for a 'crash course' in R


#WORKS IN R 4.0.3

#PUT THE SPSS FILE ON A MEMORY STICK IN THE BIN FOLDER OF R-2.5.1.
#MAKE SURE YOU HAVE LIBRARY FOLDERS FOREIGN, MVTNORM, SFSMISC AND POLYCOR IN THE
#R-2.5.1 LIBRARY FOLDER; THESE MAY BE DOWNLOADED FROM http://cran.r-project.org/
#AND CLICKING ON CONTRIBUTED EXTENSION PACKAGES.

#(PW: USED R-2.5.1 ON BLACK MEMORY STICK; ONLY WORKS WITH R-2.5)
#( CAN THEN COPY CORRELATIONS INTO A .DAT FILE AND READ INTO SPSS; CREATE SEPARATE FILES AND COPY AND PASTE;
#THEN ENTER INTO A FACTOR ANALYSIS)

#(AMEND SPSS FILENAME AND ITEM NAMES IN THE BELOW R CODE WHICH ARE ASSUMED AS SATCAT, DAT, PERF_2 AND PERF_3)

#CLICK RGUI.EXE AND CUT AND PASTE IN THE AMENDED CODE:
#
library(foreign)
library(mvtnorm)
library(sfsmisc)
library(polycor)
x <- read.spss("U:\\MY DOCUMENTS\\bereaved.sav")

p1 <- as.factor(x$ptci1)
p2 <- as.factor(x$ptci2)
p3 <- as.factor(x$ptci3)
p4 <- as.factor(x$ptci4)
p5 <- as.factor(x$ptci5)
p6 <- as.factor(x$ptci6)
p7 <- as.factor(x$ptci7)
p8 <- as.factor(x$ptci8)
p9 <- as.factor(x$ptci9)
p10 <- as.factor(x$ptci10)
p11 <- as.factor(x$ptci11)
p15 <- as.factor(x$ptci15)
p18 <- as.factor(x$ptci18)
p19 <- as.factor(x$ptci19)
p22 <- as.factor(x$ptci22)
p23 <- as.factor(x$ptci23)
p27 <- as.factor(x$ptci27)
p31 <- as.factor(x$ptci31)
res <- hetcor(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p15, p18, p19, p22, p23, p27, p31, ML=FALSE, std.err=FALSE)
res$correlation

# from https://stackoverflow.com/questions/14910101/goodness-of-fit-indices-in-r
opt <- options(fit.indices = c("GFI", "AGFI", "RMSEA", "NFI", "NNFI", "CFI", "RNI", "IFI", "SRMR", "AIC", "AICc", "BIC", "CAIC"))
library(sem)
model.f1<-matrix(c(    'F3->p1', 'lam1',NA,
                       'F1->p2', 'lam2',NA,
                       'F1->p3', 'lam3',NA,
                       'F1->p4', 'lam4',NA,
                       'F1->p5', 'lam5',NA,
                       'F1->p6', 'lam6',NA,
                       'F2->p7', 'lam7',NA,
                       'F2->p8', 'lam8',NA,
	        'F1->p9', 'lam9',NA,	
                       'F2->p10', 'lam10',NA,
                       'F2->p11', 'lam11',NA,
                       'F2->p18', 'lam18',NA,
              	        'F2->p23', 'lam23',NA,
             	        'F2->p27', 'lam27',NA,
	        'F2->p15', 'lam15',NA,
                       'F2->p19', 'lam19',NA,
              	        'F2->p22', 'lam22',NA,
             	        'F2->p31', 'lam31',NA,
                      'p1<->p1', 'th1' ,NA,
                      'p2<->p2', 'th2' ,NA,
                      'p3<->p3', 'th3' ,NA,
                      'p4<->p4', 'th4' ,NA,
                      'p5<->p5', 'th5' ,NA,
                      'p6<->p6', 'th6' ,NA,
                      'p7<->p7', 'th7',NA,
                      'p8<->p8', 'th8',NA,
	       'p9<->p9', 'th9',NA,	
                      'p10<->p10', 'th10',NA,
                      'p11<->p11', 'th11',NA,
                      'p18<->p18', 'th18',NA,
              	       'p23<->p23', 'th23',NA,
             	       'p27<->p27', 'th27',NA,
	       'p15<->p15', 'th15',NA,
                      'p19<->p19', 'th19',NA,
              	       'p22<->p22', 'th22',NA,
             	       'p31<->p31', 'th31',NA,
                      'F1<->F1',  NA, 1,
  	       'F2<->F2',  NA, 1,
  	       'F3<->F3',  NA, 1,
	       'F1<->F2',  NA, 0.2,
                      'F1<->F3', NA, 0.5,
                      'F2<->F3', NA, 0.5),
             ncol=3, byrow=T)
sem.poly.f1<-sem(model.f1, res$correlation, 278)
summary(sem.poly.f1)



library(psych)
KMO(res$correlation)
res$type
res$correlation[upper.tri(res$correlation)] <- 0
res1 <- factanal(covmat=res$correlation, factors=3, rotation="varimax")
res2 <- factanal(covmat=res$correlation, factors=3, rotation="promax")
res2 <- factanal(covmat=res$correlation, factors=3, rotation="none")

res3 <- princomp(covmat=res$correlation)
pdf("scree_princomp.pdf")
screeplot(res3)
dev.off()
library(psych)
xdat <- cbind(p1,p2,p3,p4,p5,p6)
xdat <- data.frame(xdat)
res3 <- principal(xdat,rotate="varimax",nfactors=3)
pdf("E:\\FACTOR FOR ZIPPING\\DEMO FACTOR\\scree_principal.pdf")
plot(res3$values,type="b")
dev.off()

# PW NOTE: SOME MISSING LOADINGS; THE MISSINGNESS PATTERN DEPENDS ON WHICH OF THE TWO ROTATIONS IS USED;

library(sem)
model.f1<-matrix(c(    'F1->p1', 'lam1',NA,
                       'F1->p2', 'lam2',NA,
                       'F1->p3', 'lam3',NA,
                       'F1->p4', 'lam4',NA,
                       'F1->p5', 'lam5',NA,
                       'F1->p6', 'lam6',NA,
                      'p1<->p1', 'th1' ,NA,
                      'p2<->p2', 'th2' ,NA,
                      'p3<->p3', 'th3' ,NA,
                      'p4<->p4', 'th4' ,NA,
                      'p5<->p5', 'th5' ,NA,
                      'p6<->p6', 'th6' ,NA,
                      'F1<->F1',   NA , 1),
             ncol=3, byrow=T)
sem.poly.f1<-sem(model.f1, res$correlation, 278)
summary(sem.poly.f1)

model.f1<-matrix(c(    'F1->p1', 'lam1',NA,
                       'F1->p2', 'lam2',NA,
                       'F1->p3', 'lam3',NA,
                       'F2->p4', 'lam4',NA,
                       'F2->p5', 'lam5',NA,
                       'F2->p6', 'lam6',NA,
                      'p1<->p1', 'th1' ,NA,
                      'p2<->p2', 'th2' ,NA,
                      'p3<->p3', 'th3' ,NA,
                      'p4<->p4', 'th4' ,NA,
                      'p5<->p5', 'th5' ,NA,
                      'p6<->p6', 'th6' ,NA,
                      'F1<->F1',   NA,  1,
                      'F2<->F2',   NA,  1,
                      'F2<->F1', 'gam1', NA),
             ncol=3, byrow=T)
sem.poly.f1<-sem(model.f1, res$correlation, 278)
summary(sem.poly.f1)

model.f1<-matrix(c(    'F1->p1', 'lam1',NA,
                       'F1->p2', 'lam2',NA,
                       'F1->p3', 'lam3',NA,
                       'F1->p5', 'lam5',NA,
                       'F2->p1', 'lam6',NA,
                       'F2->p2', 'lam7',NA,
                       'F2->p4', 'lam9',NA,
                       'F2->p6', 'lam10',NA,
                      'p1<->p1', 'th1' ,NA,
                      'p2<->p2', 'th2' ,NA,
                      'p3<->p3', 'th3' ,NA,
                      'p4<->p4', 'th4' ,NA,
                      'p5<->p5', 'th5' ,NA,
                      'p6<->p6', 'th6' ,NA,
                      'F1<->F1',   NA,  1,
                      'F2<->F2',   NA,  1),
             ncol=3, byrow=T)
sem.poly.f1<-sem(model.f1, res$correlation, 278)
summary(sem.poly.f1)

# ALGORITHM DOES NOT ALWAYS CONVERGE! COMMON PROBLEM IN SEM - NEED GOOD STARTING VALUES!

model.f1<-matrix(c(    'F1->p1', 'lam1',NA,
                       'F1->p2', 'lam2',NA,
                       'F1->p3', 'lam3',NA,
                       'F1->p4', 'lam5',NA,
                       'F1->p5', 'lam6',NA,
                       'F2->p1', 'lam7',NA,
                       'F2->p2', 'lam8',NA,
                       'F2->p3', 'lam9',NA,
                       'F2->p4', 'lam10',NA,
                       'F2->p6', 'lam11',NA,
                      'p1<->p1', 'th1' ,NA,
                      'p2<->p2', 'th2' ,NA,
                      'p3<->p3', 'th3' ,NA,
                      'p4<->p4', 'th4' ,NA,
                      'p5<->p5', 'th5' ,NA,
                      'p6<->p6', 'th6' ,NA,
                      'F1<->F1',   NA,  1,
                      'F2<->F2',   NA,  1),
             ncol=3, byrow=T)
sem.poly.f1<-sem(model.f1, res$correlation, 278)
summary(sem.poly.f1)

sem.poly.f1

# CAN USE DIFFERENT STARTING VALUES - IF YOU CAN FIND ONES THAT AID CONVERGENCE
# OR CHANGE MODEL - MAY BE A BAD FIT!

model.f1<-matrix(c(    'F1->p1', 'lam1',0.012,
                       'F1->p2', 'lam2',NA,
                       'F1->p3', 'lam3',NA,
                       'F1->p4', 'lam5',NA,
                       'F1->p5', 'lam6',NA,
                       'F2->p1', 'lam7',0.381,
                       'F2->p2', 'lam8',0.629,
                       'F2->p3', 'lam9',0.705,
                       'F2->p4', 'lam10',0.562,
                       'F2->p6', 'lam11',0.342,
                      'p1<->p1', 'th1' ,NA,
                      'p2<->p2', 'th2' ,NA,
                      'p3<->p3', 'th3' ,NA,
                      'p4<->p4', 'th4' ,NA,
                      'p5<->p5', 'th5' ,NA,
                      'p6<->p6', 'th6' ,NA,
                      'F1<->F1',   NA,  1,
                      'F2<->F2',   NA,  1),
             ncol=3, byrow=T)
sem.poly.f1<-sem(model.f1, res$correlation, 278)
summary(sem.poly.f1)